package shujia.day18.tcpdemo3;

import shujia.day18.DateUtil;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/*
    1:建立服务器端的socket服务，需要一个端口
    2:服务端没有直接流的操作,而是通过accept方法获取客户端对象，在通过获取到的客户端对象的流和客户端进行通信
    3:通过客户端的获取流对象的方法,读取数据或者写入数据
    4:如果服务完成,需要关闭客户端,然后关闭服务器，但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的


    目前的第一版tcp协议编程有些缺点：
        1、服务器端没有给客户端一个反馈
        2、改进成一个手动输入内容的版本
        3、就目前代码而言，服务器端只监听一次，也就是说只允许一个客户端进行连接
            解决方案：使用多线程的方式改进

 */
public class ServerDemo1 {
    public static void main(String[] args) throws Exception {
        //建立服务器端的socket服务，需要一个端口
        ServerSocket ss = new ServerSocket(12345);

        while (true){
            //使用while true的方式将监听进行包装，这样一直监听，可以有多个客户端进行连接
            //调用方法监听客户端的连接
            Socket s = ss.accept(); // 服务器运行到这一步的时候，发送阻塞，等待一个客户端的连接



            //创建用户线程对象
            ClientThread clientThread = new ClientThread(s);
            clientThread.start();


        }


        // 关闭与客户端的连接
//        s.close();

        // 释放资源,一般不关，因为服务器除特殊情况外一般不会关闭
//        if(xxxxxx){
//            ss.close();
//        }
//        ss.close();
    }
}
